struct stat_node
   {
   long int cat;             /* cell-file category value */
   long int stat;            /* statistic: number of cells with that cat */
   struct stat_node *next;   /* pointer to next stat_node in list */
   };

struct stat_list
   {
   struct stat_node *ptr;    /* pointer to first stat_node in list */
   long int count,           /* number of stat_nodes in list 
				(not counting null cells) */
	    null_stat,       /* stats for null cell */
            maxstat,         /* max. statistic in list */
            minstat,         /* min. statistic in list */
            sumstat,         /* sum of all statistics in list */
            maxcat,          /* max. cell-file category value in list */
            mincat;          /* min. cell-file category value in list */
   };

/* structures for determining tic-mark numbering scheme */
struct units 
   {
   char     *name;           /* name of unit (text) */
   long int unit;            /* tic-mark interval */
   long int every;           /* tic_mark number interval */
   };

#ifdef MAIN

struct stat_list dist_stats;
struct Categories cats;
struct FPRange fp_range;
int is_fp;

#else
extern struct Categories cats;
extern struct FPRange fp_range;

#endif

/* bar.c */
int bar(struct stat_list *, struct Colors *);
float rem(long int, long int);
/* draw_slice.c */
int draw_slice_unfilled(struct Colors *, int, double, double, double, double, double);
int draw_slice_filled(struct Colors *, DCELL, int, double, double, double, double, double);
int draw_slice(struct Colors *, int, DCELL, DCELL, int, double, double, double, double, double);
/* get_stats.c */
int get_stats(char *, char *, struct stat_list *, int);
/* pie.c */
int pie(struct stat_list *, struct Colors *);
